//package com.tanjun.gateway.gatewayservice.config;
//
//import cn.hutool.crypto.digest.MD5;
//import com.tanjun.common.constants.HeaderConstant;
//import com.tanjun.common.enums.user.UserRoleTypeEnum;
//import com.tanjun.common.model.LoginUserInfo;
//import com.tanjun.gateway.gatewayservice.service.UserLoginService;
//import feign.RequestInterceptor;
//import feign.RequestTemplate;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.context.annotation.Configuration;
//
//import java.util.List;
//import java.util.stream.Stream;
//
///**
// * 处理网关直接调用下游服务的时候传递用户信息（非通过网关路由的请求）
// */
//@Configuration
//@Slf4j
//public class FeignConfig implements RequestInterceptor {
//    @Autowired
//    private UserLoginService userLoginService;
//    /**
//     * Called for every request. Add data using methods on the supplied {@link RequestTemplate}.
//     *
//     * @param template
//     */
//    @Override
//    public void apply(RequestTemplate template) {
//        log.info("进入获取用户拦截器,url:{}",template.request().url());
//        // 从当前请求中获取网关传递的头部
//        String url=template.request().url();
//        //防止进入死循环
//        if(Stream.of("/adminUser/inner/getUserInfoById",
//                "adminUser/inner/getUserRoles")
//                .anyMatch(url::contains)){
//            return;
//        }
//        UserRoleTypeEnum roleTypeEnum= StpUtilKit.getLoginType();
//        List<String> userRoles= null;
//        List<String> userPermissions = null;
//        if(roleTypeEnum!=null){
//            userRoles=StpUtilKit.getStp(roleTypeEnum).getRoleList();
//            userPermissions=StpUtilKit.getStp(roleTypeEnum).getPermissionList();
//        }
//        LoginUserInfo loginUserInfo = userLoginService.getLoginUserInfo();
//        log.info("[gateway add header],userInfo:{}",loginUserInfo);
//        String loginTerminal=template.headers().get(HeaderConstant.LOGIN_TERMINAL).stream().findFirst().orElse("");
//        template.header(HeaderConstant.LOGIN_TERMINAL,loginTerminal);
//        if(loginUserInfo!=null){
//            template.header(HeaderConstant.USER_ID,loginUserInfo.getUserId().toString());
//            template.header(HeaderConstant.USER_NAME,loginUserInfo.getUserName());
//            template.header(HeaderConstant.USER_CODE,loginUserInfo.getUserCode());
//            template.header(HeaderConstant.USER_TYPE,loginUserInfo.getUserRoleType().getCode());
//        }
//
//        if(userRoles!=null){
//            template.header(HeaderConstant.USER_ROLES,String.join(",", userRoles));
//        }
//        else {
//            template.header(HeaderConstant.USER_ROLES, "");
//        }
//
//        template.header(HeaderConstant.USER_PERMISSION_VERSION,getPermissionVersion(userPermissions));
//
//
//
//
//    }
//
//    private String getPermissionVersion(List<String> permissions){
//       if(permissions==null){
//           return "empty";
//       }
//       return MD5.create().digestHex16(String.join("", permissions));
//    }
//}
